package com.gyy.Alarm;

import com.gyy.sdk.HCNetSDK;
import com.sun.jna.Pointer;

import java.util.Scanner;

/**
 * @Author Qiu Jiahang
 * @Date 2021/4/6 19:21
 */
public class ThermometryAlarm {

    static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
    public int lAlarmHandle = -1; //布防句柄
    public int lListenHandle = -1; //监听句柄
    public static FMSGCallBack_V31 fMSFCallBack_V31 = null;

    /**
     * 报警布防 （布防和监听选其一）
     *
     * @param userId 用户登录句柄
     */
    public void SetAlarm(int userId){
        //尚未布防,需要布防
        if (lAlarmHandle < 0) {
            if (fMSFCallBack_V31 == null) {
                fMSFCallBack_V31 = new FMSGCallBack_V31();
                Pointer pUser = null;
                if (!hCNetSDK.NET_DVR_SetDVRMessageCallBack_V31(fMSFCallBack_V31, pUser)) {
                    System.out.println("设置回调函数失败!");
                } else {
                    System.out.println("设置回调函数成功!");
                }
            }
            //报警布防参数设置
            HCNetSDK.NET_DVR_SETUPALARM_PARAM m_strAlarmInfo = new HCNetSDK.NET_DVR_SETUPALARM_PARAM();
            m_strAlarmInfo.dwSize = m_strAlarmInfo.size();
            m_strAlarmInfo.byLevel = 1;  //布防等级
            m_strAlarmInfo.byAlarmInfoType = 1;   // 智能交通报警信息上传类型：0- 老报警信息（NET_DVR_PLATE_RESULT），1- 新报警信息(NET_ITS_PLATE_RESULT)
            m_strAlarmInfo.byDeployType = 1;   //布防类型 1：客户端布防 2：实时布防
            m_strAlarmInfo.write();
            lAlarmHandle = hCNetSDK.NET_DVR_SetupAlarmChan_V41(userId, m_strAlarmInfo);
            System.out.println("lAlarmHandle: " + lAlarmHandle);
            if (lAlarmHandle == -1) {
                System.out.println("布防失败，错误码为" + hCNetSDK.NET_DVR_GetLastError());
            } else {
                System.out.println("布防成功");

                /*Scanner input = new Scanner(System.in);
                //循环从键盘输入命令，当输入Y表示布防结束
                while (true) {
                    System.out.print("是否布防结束(Y/N)：");
                    String str = input.next();
                    if (str.equals("Y")) {
                        return;
                    }
                }*/
            }
        }
    }

    /**
     * 报警监听
     *
     * 注意: 设置监听前需要现在本机pc配置端口
     * 具体步骤：库文件ClientDemo->登录设备->配置->网络参数配置->配置告警管理主机地址、告警管理主机端口（需要与NET_DVR_StartListen_V30接口中对应）
     */
    public void StartListen() {
        if (fMSFCallBack_V31 == null) {
            fMSFCallBack_V31 = new FMSGCallBack_V31();
        }
        //这里NET_DVR_StartListen_V30接口中的ip和端口需要和配置的ip和端口对应
        lListenHandle = hCNetSDK.NET_DVR_StartListen_V30("10.17.36.13", (short) 7201, fMSFCallBack_V31, null);
        if (lListenHandle == -1) {
            System.out.println("监听失败" + hCNetSDK.NET_DVR_GetLastError());
        } else {
            System.out.println("监听成功");

            /*Scanner input = new Scanner(System.in);
            //循环从键盘输入命令，当输入Y表示监听结束
            while (true) {
                System.out.print("是否监听结束(Y/N)：");
                String str = input.next();
                if (str.equals("Y")) {
                    return;
                }
            }*/
        }
    }
}
